#include "pagenumberconfigfacade.h"
#include "processingsettings.h"
#include "systemconfig.h"
#include "pagepositionsystem.h"
#include "gridpagenumbersystem.h"
#include <QDebug>
PageNumberConfigFacade& PageNumberConfigFacade::instance()
{
    static PageNumberConfigFacade instance;
    return instance;
}
void PageNumberConfigFacade::setProcessingSettings(ProcessingSettings* settings)
{
    m_processingSettings = settings;
}
void PageNumberConfigFacade::setSystemConfig(SystemConfig* config)
{
    m_systemConfig = config;
}
// =================================================================
// 页码格式配置门面实现
// =================================================================
QString PageNumberConfigFacade::getCurrentFormat() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.format;
}
void PageNumberConfigFacade::setCurrentFormat(const QString& format)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.format = format;
}
QStringList PageNumberConfigFacade::getPresetFormats() const
{
    return PageNumberFormatter::getPresetFormats();
}
QString PageNumberConfigFacade::getFormatDescription(const QString& format) const
{
    return PageNumberFormatter::getFormatDescription(format);
}
bool PageNumberConfigFacade::isValidFormat(const QString& format) const
{
    return PageNumberFormatter::isValidFormat(format);
}
QString PageNumberConfigFacade::generatePreview(const QString& format,
                                               int sampleLocal,
                                               int sampleGlobal,
                                               int sampleTotal) const
{
    // 只使用全局页码（忽略本地页码参数）
    return PageNumberFormatter::generatePreview(format, sampleGlobal, sampleTotal);
}
// =================================================================
// 页码位置配置门面实现
// =================================================================
int PageNumberConfigFacade::getCurrentPosition() const
{
    ensureProcessingSettings();
    return static_cast<int>(m_processingSettings->pageNumber.position);
}
void PageNumberConfigFacade::setCurrentPosition(int position)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.position = static_cast<PagePositionSystem::Position>(position);
}
QStringList PageNumberConfigFacade::getAvailablePositions() const
{
    QStringList positionNames;
    auto positions = PagePositionSystem::getPresetPositions();
    for (auto position : positions) {
        positionNames.append(PagePositionSystem::getDisplayName(position));
    }
    return positionNames;
}
// =================================================================
// 页码样式配置门面实现
// =================================================================
QFont PageNumberConfigFacade::getCurrentFont() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.font;
}
void PageNumberConfigFacade::setCurrentFont(const QFont& font)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.font = font;
}
QColor PageNumberConfigFacade::getCurrentColor() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.color;
}
void PageNumberConfigFacade::setCurrentColor(const QColor& color)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.color = color;
}
QStringList PageNumberConfigFacade::getPresetFonts() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.getPresetFontFamilies();
}
QList<int> PageNumberConfigFacade::getPresetFontSizes() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.getPresetFontSizes();
}
// =================================================================
// 页码显示控制门面实现
// =================================================================
bool PageNumberConfigFacade::isPageNumberEnabled() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.enabled;
}
void PageNumberConfigFacade::setPageNumberEnabled(bool enabled)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.enabled = enabled;
}
bool PageNumberConfigFacade::isShowOnCover() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.showOnCover;
}
void PageNumberConfigFacade::setShowOnCover(bool show)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.showOnCover = show;
}
int PageNumberConfigFacade::getStartNumber() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.startNumber;
}
void PageNumberConfigFacade::setStartNumber(int number)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.startNumber = number;
}
// =================================================================
// 高级配置门面实现
// =================================================================
double PageNumberConfigFacade::getOpacity() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.opacity;
}
void PageNumberConfigFacade::setOpacity(double opacity)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.opacity = opacity;
}
double PageNumberConfigFacade::getRotation() const
{
    ensureProcessingSettings();
    return m_processingSettings->pageNumber.rotation;
}
void PageNumberConfigFacade::setRotation(double rotation)
{
    ensureProcessingSettings();
    m_processingSettings->pageNumber.rotation = rotation;
}
// =================================================================
// 统一格式化门面实现
// =================================================================
QString PageNumberConfigFacade::formatPageNumber(int localPage, int globalPage, int totalPages) const
{
    ensureProcessingSettings();
    // 只使用全局页码（忽略本地页码参数）
    return m_processingSettings->pageNumber.formatPageNumber(globalPage, totalPages);
}
void PageNumberConfigFacade::applyAllChanges()
{
    // 这里可以触发配置变更的通知
    // 例如：发送信号、更新UI、保存配置等
    if (m_processingSettings) {
    }
    if (m_systemConfig) {
    }
}
void PageNumberConfigFacade::resetToDefaults()
{
    if (m_processingSettings) {
        // 重置页码配置为默认值
        m_processingSettings->pageNumber = ProcessingSettings::PageNumberSettings();
    }
}
// =================================================================
// 辅助方法实现
// =================================================================
void PageNumberConfigFacade::ensureProcessingSettings() const
{
    if (!m_processingSettings) {
        qCritical() << "[ConfigFacade] ❌ ProcessingSettings未设置！请先调用setProcessingSettings()";
        throw std::runtime_error("ProcessingSettings not set in PageNumberConfigFacade");
    }
}
void PageNumberConfigFacade::ensureSystemConfig() const
{
    if (!m_systemConfig) {
    }
}